package editorsvg.editor.comandos;

import editorsvg.editor.vista.EditorDocumento;
import java.util.Deque;
import java.util.LinkedList;

/**
 * Gestor de comando. Permite ejecutar comandos y deshacer y rehacer los comandos
 * ejecutados.
 * @author Jorge Berjano.
 */
public class GestorComandos {

    private Deque<Comando> comandosHechos = new LinkedList<Comando>();
    private Deque<Comando> comandosDeshechos = new LinkedList<Comando>();
    private EditorDocumento editor;

    public GestorComandos(EditorDocumento editor) {
        this.editor = editor;
    }

    public void ejecutar(Comando comando) {
//        System.out.println("ejecutar " + comando);
        comandosHechos.addLast(comando);
        comando.hacer();
        comandosDeshechos.clear();
        
        editor.getSeleccion().actualizar();
        editor.repintar();
    }

    public void rehacer() {
        if (comandosDeshechos.size() > 0) {
            Comando comando = comandosDeshechos.removeLast();
            if (comando != null) {
                comandosHechos.addLast(comando);
                comando.hacer();
                
                editor.getSeleccion().limpiar();
                editor.repintar();
            }
        }
    }

    public void deshacer() {
        if (comandosHechos.size() > 0) {
            Comando comando = comandosHechos.removeLast();
            if (comando != null) {
                comandosDeshechos.addLast(comando);
                comando.deshacer();
                
                editor.getSeleccion().limpiar();
                editor.repintar();
            }
        }
    }
}
